/*
 * 爱组搭 http://aizuda.com 低代码组件化开发平台
 * ------------------------------------------
 * 受知识产权保护，请勿删除版权申明
 */
package com.aizuda.oss;

import com.aizuda.common.toolkit.DateUtils;
import com.aizuda.oss.autoconfigure.OssProperties;
import com.aizuda.oss.model.OssMark;
import com.aizuda.oss.model.OssMessage;

import java.io.InputStream;
import java.util.UUID;

/**
 * aizuda 文件存储接口
 * <p>
 * 尊重知识产权，CV 请保留版权，爱组搭 http://aizuda.com 出品
 *
 * @author hubin
 * @since 2022-03-22
 */
public interface IFileStorage {

    /**
     * 初始化
     *
     * @param ossProperties 配置
     * @return 当前对象
     */
    IFileStorage init(OssProperties ossProperties);


    OssMessage upload(byte[] data);


    /**
     * 文件上传
     *
     * @param inputStream
     * @return
     */
    OssMessage upload(InputStream inputStream);

    /**
     * 文件删除
     *
     * @param pathName 文件露肩
     */
    void delete(String pathName);

    /**
     * 获取域名地址
     *
     * @return
     */
    String getEndpointLink();

    /**
     * 生成日期文件路径
     *
     * @return
     */
    default String getPath() {
        String uuid = UUID.randomUUID().toString();
        return DateUtils.nowTimeFormat("yyyy/MM/dd") + "/" + uuid;
    }

    /**
     * 采用服务端签名后直传方案
     *
     * @return 签名
     * @author VampireAchao
     * @link https://help.aliyun.com/document_detail/31927.html
     */
    OssMark getMark();

}
